名称

route —— 手动操作路由表

语法

route [-j jail] [-dnqtv] command [[modifiers] args]

modifiers,修饰符

描述

route 实用程序用于手动操作网络路由表。通常不需要它,因为系统路由表管理守护进程(如 routed(8) )应该负责此任务。

route 实用程序支持有限数量的通用选项,但支持丰富的命令语言,使用户能够指定任何可以通过 route(4) 中讨论的编程接口传递的任意请求。

可用选项

可用命令

monitor 命令的语法

route [-n] monitor [-fib number]

flush 命令的语法

route [-n] flush [family] [-fib number]

如果指定了 flush 命令,则 route 将 “刷新” 所有网关条目的路由表。当地址族可以由任何 -inet6-inet 修饰符指定时,只有具有指定族中地址的目的地的路由才会被删除。此外,-4-6 可以用作 -inet-inet6 修饰符的别名。当指定了 -fib 选项时,该操作将应用于指定的FIB(路由表)。

add 命令的语法

route [-n] add [-net | -host] destination gateway [netmask] [-fib number]

其他命令的语法

route [-n] command [-net | -host] destination [gateway [netmask]] [-fib number]

其中 destination 是目标主机或网络,gateway 是下一跳中介,数据包应通过它进行路由。通过解释指定为目的地参数的互联网地址,可以将到特定主机的路由与到网络的路由区分开。可选的修饰符 -net-host 分别强制将目标解释为网络或主机。否则,如果 destination 具有 INADDR_ANY(0.0.0.0) 的“本地地址部分”,或者如果 destination 是网络的符号名称,则假设路由是到网络的;否则,它被假定为到主机的路由。可选地,destination 也可以以 net/bits 格式指定。

例如:

defaultdestination 是默认路由的同义词。对于IPv4,它是 -net -inet 0.0.0.0 ,对于IPv6,它是 -net -inet6::

如果目的地可以通过不需要中间系统充当网关的接口直接访问,则应指定 -interface 修饰符;给出的网关是该主机在公共网络上的地址,表示用于传输的接口。或者,如果接口是点对点的,则可以给出接口本身的名称,在这种情况下,即使本地或远程地址发生变化,路由仍然有效。

可选的 -netmask 修饰符旨在通过网掩码选项实现OSI ESIS重定向的效果,或手动添加具有与隐含网络接口不同的网掩码的子网路由(否则将使用OSPF或ISIS路由协议进行通信)。一个指定了一个额外的后续地址参数(将被解释为网络掩码)。通过确保此选项遵循目标参数,可以覆盖AF_INET情况下生成的隐式网络掩码。

对于AF_INET6,可以使用 -prefixlen 限定符而不是 -mask 限定符,因为IPv6中不允许使用非连续掩码。例如,-prefixlen 32 指定将使用 ffff:ffff:00000:0000:0000:00000:00000:0000 的网络掩码。默认前缀为64。但是,如果为 destination 指定了 default 前缀,则假定为0。请注意,限定符仅适用于AF_INET6地址族。

路由具有相关的标志,当发送到路由匹配的目的地时,这些标志会影响协议的操作。这些标志可以通过指示以下相应的修饰符来设置(或有时清除):

可选的修饰符 -rtt-rtvar-sendpipe-recvpipe-mtu-hopcount-expire-sthresh 为传输级协议(如TCP或TP4)在路由条目中维护的数量提供初始值。这些可以通过在每个这样的修饰符之前添加 -lock 元修饰符来单独锁定,或者可以指定所有后续的度量都可以由 -lockrest 元修饰符锁定。

请注意,-expire 接受路由的过期时间为自纪元以来的秒数(参见 time(3) )。当数字的第一个字符是“+”或“-”时,它被解释为相对于当前时间的值。

可选修饰符 -fib number 指定该命令将应用于非默认FIB。该 number 必须小于 net.fibs sysctl(8) MIB。当未指定此修饰符或指定负数时,将使用 net.my_fibnum sysctl(8) MIB中显示的默认FIB。

该数字允许通过逗号分隔的列表和/或范围规范进行多个FIB。“-fib 2,4,6”表示FIB编号2、4和6。“-fib 1,3-5,6”表示1、3、4、5和6。

changeadd 命令中,如果目标和网关不足以指定路由(如ISO中多个接口可能具有相同地址的情况),则可以使用 -ifp-ifa 修饰符来确定接口或接口地址。

首先使用 gethostbyname(3) 将为 destinationgateway 指定的所有符号名称查找为主机名。如果此查找失败,则使用 getnetbyname(3) 将该名称解释为网络名称。

route 实用程序使用路由套接字和新的消息类型RTM_ADD、RTM_DELETE、RTM_GET和RTM_CHANGE。因此,只有超级用户可以修改路由表。

FreeBSD支持可扩展的多路径路由。默认情况下,它是激活的,但可以通过将 net.route.multipath sysctl(8) MIB设置为0来关闭。

有多种路由查找算法可用。它们可以通过为IPv4设置 net.route.algo.net.algo 和为IPv6设置 net.route.algo.inet6.algo 来配置 sysctl(8) MIB。

可用算法列表可以通过访问以下 sysctl(8) MIB获得:IPv4的 net.route.algo.net.algo_list 和IPv6的 net.rute.algo.inet6.algo_list

以下算法可用:

算法是根据系统路由表的大小自动选择的。它们可以更改,但并非每种算法对每种FIB大小都表现最佳。

退出状态

route 实用程序在成功时退出0,如果发生错误,则退出>0。

示例

添加路由

将默认路由添加到网络路由表中。这将把路由表中不可用的目的地的所有数据包发送到192.168.1.1的默认网关:

添加默认路由的简化版本也可以写成:

通过172.16.1.1网关向172.16.10.0/24网络添加静态路由:

更改路由

更改路由表中已建立的静态路由的网关:

显示路由

显示目标网络的路由:

删除路由

从路由表中删除静态路由:

从路由表中删除所有路由:

路由表可以用 netstat(1) 列出。

诊断

正在将指定的路由添加到表中。打印的值来自 ioctl(2) 调用中提供的路由表条目。如果使用的网关地址不是网关的主地址(gethostbyname(3) 返回的第一个地址),则网关地址将以数字和符号形式打印。


如上所述,但删除条目时。


当指定 flush 命令时,每个被删除的路由表条目都会用这种形式的消息表示。


尝试添加路由失败,因为列出的网关不在直接连接的网络上。必须给出下一跳网关。


尝试对表中不存在的条目执行删除操作。


尝试了添加操作,但系统资源不足,无法分配内存来创建新条目。


change 操作导致路由的网关使用与更改的路由相同的路由。下一跳网关应该可以通过不同的路由访问。

参阅

历史

route 实用程序出现在4.2BSD中。